天天基金爬虫

您所在的位置:网站首页 wind 爬虫 天天基金爬虫

天天基金爬虫

2024-07-10 00:27| 来源: 网络整理| 查看: 265

天天基金爬虫——天天基金爬取基金信息统计持仓净值 一、获取网页1、打开一个基金网页2、分析页面3、获取页面 二、解析数据1、查看需要的基本信息 三、统计求和1、步骤2、完整代码 四、喜欢的话请点个关注吧!不要忘了长按点赞一键三连哦!

一、获取网页 1、打开一个基金网页

我们先打开天天基金网,然后随便打开一个基金的页面。例如161725招商中证白酒指数。

链接: http://fund.eastmoney.com/161725.html.

我们发现天天基金的网址构成是http://fund.eastmoney.com/+基金编码+.html 在这里插入图片描述 椰树牌椰汁的即视感d(ŐдŐ๑)。

2、分析页面

我们右键点开检查,打开network,观察返回具体基金信息的文档是哪个。 在这里插入图片描述 好像就是这个以基金编码为名字的文件呀,那我们把它获取下来吧。

3、获取页面 要用到的库,request获取页面。 import requests 来一个经典request headers header={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36' } 写一个函数获取页面 def getfund(code:str): url='http://fund.eastmoney.com/'+code+'.html' page=requests.get(url) print(page.text) 测试一下看看页面内容 if __name__=='__main__': getfund('161725')

在这里插入图片描述 这里我们发现返回值乱码了,所以我们应该重新把页面加载成utf-8的编码。

加载成utf-8 def getfund(code:str): url='http://fund.eastmoney.com/'+code+'.html' page=requests.get(url) html=str(page.content,'utf-8') #把content中的内容重新编码成utf-8 print(html)

测试一下,发现这回中文正常不乱码了。 在这里插入图片描述 这个title很灵性呀๑乛v乛๑。

二、解析数据 1、查看需要的基本信息

先明确一下我们想要的信息有哪些,基本的话就净值和基金名字吧。

在网页检查中选中净值 在这里插入图片描述 我们观察到净值在dataNums下,边上还有变动幅度。读出净值 我们发现净值在这边。 1.5613

现在我们要先把之前获取的页面变成方便查找的形式,这里用到BeautifulSoup。 然后我们用find()按相应信息找出净值

import requests from bs4 import BeautifulSoup header={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36' } def getfund(code:str): url='http://fund.eastmoney.com/'+code+'.html' page=requests.get(url) html=str(page.content,'utf-8') #把content中的内容重新编码成utf-8 soup=BeautifulSoup(html,'lxml') value=soup.find_all('dd',{'class':'dataNums'})[1].find('span').getText() print(value)

测试一下 在这里插入图片描述

没错是我们想要的。

同理获取基金名字和日期。 def getfund(code:str): url='http://fund.eastmoney.com/'+code+'.html' page=requests.get(url) html=str(page.content,'utf-8') #把content中的内容重新编码成utf-8 soup=BeautifulSoup(html,'lxml') value=soup.find_all('dd',{'class':'dataNums'})[1].find('span').getText() print(value) name=soup.find('a',{'href':url,'target':"_self"}).getText() print(name) date=soup.find('dl',{'class':"dataItem02"}).find('p').getText() print(date[6:-1])

测试一下 在这里插入图片描述

好,没问题。

三、统计求和 1、步骤 先写一个字典存下持仓的基金编码和份额。 tips:这里只是举个例子,不代表任何投资建议,如有雷同纯属巧合 funds={ '004432':2673.06, '001156':739.65, '009265':893.87, '160222':2888.71, '009821':1000.00, '008903':2215.10, '161725':2513.26, '001475':1781.60, '161028':2571.06, '270002':2772.19, '008168':9905.49} 然后我们把getfund()函数返回值设置成净值吧。 def getfund(code:str): url='http://fund.eastmoney.com/'+code+'.html' page=requests.get(url) html=str(page.content,'utf-8') #把content中的内容重新编码成utf-8 soup=BeautifulSoup(html,'lxml') value=soup.find_all('dd',{'class':'dataNums'})[1].find('span').getText() name=soup.find('a',{'href':url,'target':"_self"}).getText() date=soup.find('dl',{'class':"dataItem02"}).find('p').getText()[6:-1] print("基金编号:",code,'\n基金名:',name,"\n日期:",date,"净值:",value) return float(value) 我们以此从字典中取出代码,获得净值后计算总市值,记得保留两位小数。 if __name__=='__main__': total=0 for code in funds: share=funds[code] price=share*getfund(code) total+=price print('份额:',share,'市值:','%.2f'%price) print('总计:','%.2f'%total)

运行一下看看 在这里插入图片描述 基本实现了预期。

2、完整代码 #by concyclics import requests from bs4 import BeautifulSoup header={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36' } funds={ '004432':2673.06, '001156':739.65, '009265':893.87, '160222':2888.71, '009821':1000.00, '008903':2215.10, '161725':2513.26, '001475':1781.60, '161028':2571.06, '270002':2772.19, '008168':9905.49} def getfund(code:str): url='http://fund.eastmoney.com/'+code+'.html' page=requests.get(url) html=str(page.content,'utf-8') #把content中的内容重新编码成utf-8 soup=BeautifulSoup(html,'lxml') value=soup.find_all('dd',{'class':'dataNums'})[1].find('span').getText() name=soup.find('a',{'href':url,'target':"_self"}).getText() date=soup.find('dl',{'class':"dataItem02"}).find('p').getText()[6:-1] print("基金编号:",code,'\n基金名:',name,"\n日期:",date,"净值:",value) return float(value) if __name__=='__main__': total=0 for code in funds: share=funds[code] price=share*getfund(code) total+=price print('份额:',share,'市值:','%.2f'%price) print('总计:','%.2f'%total) 四、喜欢的话请点个关注吧!不要忘了长按点赞一键三连哦!


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3